#ifndef RULE_H
#define RULE_H

#include <QString>
#include <QList>
#include <QStringList>

/**
 * @brief 规则类，表示专家系统中的推理规则
 * 
 * 每个规则包含名称、条件列表和结论，用于在推理过程中进行匹配和推导
 */
class Rule
{
public:
    /**
     * @brief 默认构造函数
     */
    Rule();
    
    /**
     * @brief 带参数的构造函数
     * @param name 规则名称
     * @param conditions 条件列表
     * @param conclusion 结论
     */
    Rule(const QString &name, const QStringList &conditions, const QString &conclusion);
    
    /**
     * @brief 获取规则名称
     * @return 规则名称
     */
    QString getName() const;
    
    /**
     * @brief 获取条件列表
     * @return 条件列表
     */
    QStringList getConditions() const;
    
    /**
     * @brief 获取结论
     * @return 结论
     */
    QString getConclusion() const;
    
    /**
     * @brief 检查规则是否匹配给定的事实
     * @param facts 事实列表
     * @return 如果规则的所有条件都在事实列表中，则返回true，否则返回false
     */
    bool isMatched(const QStringList &facts) const;

private:
    QString m_name;         ///< 规则名称
    QStringList m_conditions; ///< 条件列表
    QString m_conclusion;   ///< 结论
};

#endif // RULE_H